#include"FdInfo.h"
#include <sys/epoll.h>
#include <unistd.h>
#include<unordered_map>
#include<mutex>
using namespace std;
#define OPEN_SIZE 1024


enum class EventType{
    ADD,
    MODIF,
    DEL
};
class EpollReactor{
public:
   EpollReactor();
   ~EpollReactor();
   void setfdinfo(FdInfo info);  //设置当前文件描述符
   inline int getfd(){
       return m_epfd;
   }
   inline void SetIsStart(bool flag){   //设置反应堆开关
       this->isstart=flag;
   }
   void run();
   void removeFdinfo(int fd);
   int add();
   int remove();
   int modify();
  
   void  SelectTask(FdInfo info,EventType type);

private:
   void diapathcer(int timeout=1000);   //启动反应堆
   void addFdinfo(FdInfo info);
   int ctl(int opt);
private:
    bool isstart;      //反应堆开关
    FdInfo m_info;     //文件描述符信息  对应得回调函数 参数
    //epoll 树节点
    int m_epfd;
    struct epoll_event*event;
    //mutex Fdmutex;     
    unordered_map<int,FdInfo>StorageFdInfo;  //存储FdInfo
};